\documentclass[a4paper,10pt,titlepage]{article}
\usepackage[paperwidth=190mm,paperheight=290mm,left=1.5cm,top=3cm,right=1.5cm,bottom=1cm,head=2.0cm,includefoot]{geometry}
\usepackage[utf8]{inputenx}
\usepackage[usenames,dvipsnames]{color}
\usepackage{pdfpages}
\usepackage[activeacute,spanish]{babel}
\usepackage{titlesec}
\usepackage{lastpage}
\usepackage{comment}
\usepackage{fancyhdr}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{bookman}
\usepackage{booktabs}
\usepackage{appendix}
\usepackage{enumerate}

\usepackage{amsmath}
\usepackage{longtable}
\usepackage{moreverb}
\usepackage{multirow}
\usepackage{ulem}

\usepackage{array}
\usepackage{float}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{t1enc}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{latexsym}

\usepackage{amssymb}
\usepackage{slashbox} %slash para la tabla
\usepackage{pdfpages} % to import PDF pages

\usepackage{enumerate}
\usepackage{etoolbox}
\usepackage[procnames]{listings}
\usepackage{setspace}
\usepackage{palatino}

\usepackage[pdfborder={0 0 0}]{hyperref}
\usepackage{makeidx}
\usepackage{caption}
\usepackage{verbatim}
\usepackage{listingsutf8}

\usepackage{textcomp}

\lstset{language=bash, extendedchars=\true, inputencoding=utf8, mathescape=false, upquote=true, basicstyle=\ttfamily\small, stringstyle=\color{Green}\upshape, showstringspaces=false, breaklines=true, commentstyle=\color{Red}\slshape, keywordstyle=\color{Violet}\bfseries, emph={and, as, break, continue, del, else, elsif, except, exec, finally, for, foreach, from, global, if, import, in, is, not, or, pass, return, while}, emphstyle=\color{BurntOrange}\bfseries, numbers=left, numberstyle=\footnotesize\color{Gray}, numbersep=15pt, tabsize=2, frame=Ltb, framerule=0pt, framexleftmargin=0.3cm, rulesep=.4pt, rulesepcolor=\color{Gray}}

\renewcommand{\headrulewidth}{1pt}
\renewcommand{\footrulewidth}{1pt}

\titleformat{\section}{\normalfont\Large\bfseries}{\thesection}{1ex}{}
\titleformat{\subsection}{\normalfont\large\bfseries}{\thesubsection}{1em}{}[\vspace*{0.25cm}]
\titleformat{\paragraph}[block]{\normalsize}{\theparagraph}{0px}{\underline}
\titleformat{\subparagraph}[block]{\normalsize\bfseries}{\thesubparagraph}{0px}{\flushleft}

\makeatletter
\preto{\@verbatim}{\topsep=2pt \partopsep=2pt }
\makeatother

\begin{document}

\pagestyle{fancy}
\chead{TP de Sistemas Operativos}
\lhead{\includegraphics[width=1.7cm]{./logo.png}}
\lfoot{Grupo:06 Tema:Y}
\cfoot{Página \thepage~de \pageref{LastPage}}
\rfoot{$1^{er}$ Cuatrimentre 2013}

\includepdfset{pages=-,nup=1x1,landscape=false}
\includepdf[scale=0.95, pagecommand={\thispagestyle{fancy}}]{Caratula.pdf}

\setcounter{tocdepth}{2}
\tableofcontents

\newpage
\vspace*{\stretch{1}}
\titlerule
  \begin{center}
  \Huge{
    \vspace{1em}
    INFORME
    \vspace{1em}
  }
  \end{center}
\titlerule
\vspace*{\stretch{2}}

\addtocounter{part}{1}
\addcontentsline{toc}{part}{\thepart.\hspace*{0.3cm}Informe}


%%%%%%%%%%%%%%%%%%%%%%%%%%%HIPOTESIS Y ACLACIONES GLOBALES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage
\section{Hip\'otesis y aclaraciones globales}
Las aclaraciones pertinentes a cada comando se dan en un apartado en la sección de esta
documentación que corresponde a dicho comando. Ademas, se incluyen aquí aclaraciones
pertinentes a multiples comandos:
\begin{enumerate}
  \item Aquellos comandos que solo pueden tener una instancia en ejecución disponen de
  un mecanismo central para verificar la existencia de otras instancias y reportar dicho
  error al usuario (\verb|bloquear_pid|), pero son responsables de cuando usar este mecanismo.
  \item  Los archivos maestros no contienen errores o sea el contenido solo contiene caracteres ASCII alfanumericos.
  \item El usuario no interfiere activamente con las funciones o archivos propios del sistema
  \item Los archivos de configuración y maestros son los dados por la catedra en el sitio de la materia o similares con el mismo formato de campos y nombre, cuya formación es correcta y no se modifican durante la ejecución del programa.
  \item Después de inicializar el sistema el usuario no debe borrar, 
modificar o eliminar las carpetas y archivos de configuracion, los que fueron
creados durante la instalacion.
  \item Si el ambiente ya fue inicializado anteriormente el iniciador se lo comunica al usuario, dejando
registro en el log y termina la ejecucion, sin ofrecer al usuario la posibilidad
de invocar a DetectaY.sh
	\item El Comando VLog solo puede ver los logs de los comandos \textit{InicioY, DetectaY, Interprete o MoverY}
\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%PROBLEMAS RELEVANTES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage
\section{Problemas relevantes}

\begin{itemize}
  \item Validación de campos de los archivos de datos, ya que estos eran variables dependiendo del pais y del sistema, fue dificultoso la validación de los campos de los registros. Se resolvio entre varios integrantes del grupo separando las funcionalidades de separación de campos y validación de los mismos.
  \item Obtener registros mediante separadores variables dependiendo del archivo, idem al item anterior, ya que en los registros estaban los separadores de campos, los separadores decimales y podria haber o no separadores de fecha cuyo caracter era libre, ademas el separador decimal dependiendo del sistema y pais hizo que esta parte fuera mas dificultosa para los calculos. Se resolvio de la misma manera que el inciso anterior.
  \item Ingregración de los componentes del TP, hubo dificultad en esta parte ya que faltaron pruebas en los diferentes componentes que hacian al sistema. Se resolvio en reuniones de grupo para la integración del sistema.
\end{itemize}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ARCHIVO README%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage
\section{Archivo README}
\subsection{Indicaciones de instalación}
\begin{enumerate}

  \item Insertar el dispositivo de almacenamiento.
  \item Crear en el directorio corriente un directorio de trabajo.
  \item Copiar grupo06.tar.gz en ese directorio.
  \item Extraer los archivos del tar.gz en ese mismo directorio.
  \item Desde la consola para extraer los archivos se utiliza el comando:
   \begin{verbatim}
   		tar -zxvf grupo06.tar.gz 
   \end{verbatim}
  
\end{enumerate}

\subsection{Instrucciones de instalación}

\begin{enumerate}
  \item Abrir la terminal.
  \item Dirigirse al directorio de trabajo.
  \item Ejecutar InstalY.sh como indica el comando.
  \item Seguir los pasos que aparecen en pantalla para instalar el componente.
  \item Para poder instalar el Componente se debera tener instalado Perl 5 en alguna de sus versiones, el instalador indicara si lo tiene instalado o no.
  \item El instalador verificara si hubo instalación previa, en caso de estar completa terminara la instalación, en caso de estar incompleta podra completar la misma.
  \item Si el instalador finaliza exitosamente, dejara un árbol de directorios dentro de la carpeta \textit{$\sim$/grupo06/}, donde $\sim$ es el directorio donde se ejecuto el instalador, cuyos directorios seran los que el usuario indico durante la instalación, tambien deja un archivo de configuración con la ruta \textit{$\sim$/grupo06/conf/InstalY.conf} y un archivo de log de la instalación en el mismo directorio con el nombre \textit{InstalY.log}
\end{enumerate}

\subsection{Instrucciones para correr el paquete}

\begin{enumerate}
  \item Abrir la terminal.
  \item Dirigirse al directorio de archivos ejecutables indicado en la instalación, en caso de no saber cual fue, puede ejecutar nuevamente la instalación que dira en el listado de configuración cual fue.
  \item Ejecutar InicioY.sh como indica el comando.
  \item Si la inicializacion termina exitosamente, entonces se pedira al usuario
	que ingrese la cantitad de ciclos para DetectaY y el tiempo de espera entre 
	ciclos en segundos.
  \item Al finalizar la inicialización de parametros el comando podra llamar a Detectar, en caso de no iniciar Detectar, debera iniciarse manualmente.
\end{enumerate}
  
\subsection{Instrucciones para mover archivos}

\begin{enumerate}
  \item Se debe ejecutar MoverY.sh indicando la ruta del archivo a mover y el
  directorio de destino. Se podr\'a indicar adem\'as el comando que invoca la funci\'on. \\ 
  Maneras de invocar MoverY.sh:
  \begin{verbatim}
    MoverY.sh <Ruta del Archivo> <Destino>
    MoverY.sh <Ruta del Archivo> <Destino> <Comando>
  \end{verbatim}     
\end{enumerate}


\subsection{Instrucciones para visualizar contenido de archivo de log}
\begin{enumerate}
  \item Se debe ejecutar VlogY.sh indicando el nombre del comando, que se
  corresponde con el nombre del archivo log a visualizar, e indicando además
  el filtro que se desea realizar.
  
  A continuación se detallan cuales son las opciones que permiten visualizar el contenido del log:

  \begin{itemize}
    \item Opción -l n: esta opción permite visualizar las ultimas n lineas del archivo log correspondiente.
      Uso:
      \begin{verbatim}
        VlogY.sh <Comando> -l <Numero de lineas>  
      \end{verbatim}
      
    \item Opción -f n: permite visualizar las primeras n lineas del archivo log correspondiente.
      Uso:
      \begin{verbatim}
        VlogY.sh <Comando> -f <Numero de lineas>  
      \end{verbatim}
     
    \item Opción -s: permite visualizar aquellas que contienen al string buscado, indicando
    el número de linea en el que aparecen en el archivo log correspondiente.
    Uso:
    \begin{verbatim}
      VlogY.sh <Comando> -s <String a buscar>
    \end{verbatim}   
  \end{itemize}
\end{enumerate}

\subsection{Instrucciones para detener ejecuci\'on de comandos}
\begin{enumerate}
  \item Identificar el nombre del comando a ser detenido
  \item Abrir una terminal
  \item Ejecutar:
    \begin{verbatim}
      StopY.sh <Comando>
    \end{verbatim}
  \item La funcion ejecutada solicita al proceso asociado al comando que se detenga y
    espera a verificar que se cumpla esto, indicando al usuario el resultado. En el caso
    normal, el proceso termina de realizar sus tareas pendientes y se detiene correctamente.
    En caso de error, continuar con estas instrucciones.

  \begin{center}
    \bfseries\Large ADVERTENCIA
    
    \normalsize Continuar con estas instrucciones lleva a detener forzozamente la ejecucion
      del proceso, lo cual puede interrumpir procesamiento importante e irrecuperable y puede
      dañar irreparablemente archivos en uso. 
  \end{center}

  \item Ejecutar:
    \begin{verbatim}
      StopY.sh -K <Comando>
    \end{verbatim}
  \item La funcion ejecutada da al comando un tiempo adicional para que responda al
    pedido anterior. Si se detiene en ese periodo, continua como el caso anterior. Si no
    se detiene, se invoca al sistema operativo para detener forzozamente su ejecucion,
    lo cual puede interrumpir procesamiento importante e irrecuperable y puede dañar
    irreparablemente archivos en uso por el proceso.
\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LISTADO DE COMANDOS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage
\section{Comandos}

%%% INSTALY %%%
\subsection{InstalY}
Este comando va a permitir la instalaci\'on del sistema CONTROLY.

Cuando se interactúa con el usuario, se mostrará entre paréntesis los valores por defecto.

\paragraph{Archivos relacionados}
\begin{enumerate}   
  \item Output
    \begin{itemize}
      \item[-]InstalY.conf
      \item[-]InstalY.log
    \end{itemize}      
\end{enumerate} 

\paragraph{Invocación}
\begin{enumerate}

  \item La invocación de este comando es manual. Se invoca de la siguiente manera desde donde fue extraído el archivo:
  \begin{verbatim}
   ./InstalY.sh
  \end{verbatim}

\end{enumerate}

\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
	\item Cuando el instalador pida ingresar un directorio, una extension o un tamaño de archivo si el usuario desea utilizar el default puede hacerlo presionando la tecla \textit{<<ENTER>>}
	\item Cuando el instalador pida ingresar un directorio, por ejemplo el bin, se debera poner el árbol de directorios que se encuentran debajo de \textit{$\sim$/grupo06/} donde \textit{$\sim$} es el directorio donde se extrayeron los archivos de grupo06.tar.gz, estos directorios no se pueden repetir para ninguna pregunta
  \item Cuando el instalador pida ingresar el espacio libre en disco para el arribo de archivos o el tamaño de máximo para archivos de log, se debe ingresar un número entero
\end{itemize}

%%% INICIOy %%%
\newpage
\subsection{InicioY}

Este comando se va a encargar de preparar al entorno de ejecución del TP.\\
En primer lugar se debe asegurar que se dispone de toda la información para continuar con el proceso,
deben estar los comandos, archivos maestros y las tablas de configuración con los permisos adecuados.
De no poseer toda la información necesaria, se indicará cuales son los componentes faltantes y
se terminará la ejecución. \\
Si no hay errores o faltantes se arrancará el comando DetectaY si el usuario asi lo desea.
 
\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] InstalY.conf
    \end{itemize}
  \item Output
    \begin{itemize}
      \item[-] Archivo de Log de InicioY
    \end{itemize}      
\end{enumerate} 

\paragraph{Invocación}
\begin{enumerate}
   \item La invocación de este comando es manual. Se invoca de la siguiente manera dentro de la carpeta de ejecutables indicada en la instalación:
   \begin{verbatim}
   . InicioY.sh
   \end{verbatim}
   \item Si el ambiente ya fue inicializado entonces se lo comunica al usuario, dejando
registro en el log y termina la ejecucion.
\end{enumerate}


\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item El componente valida que la instalación este completa
  \item El componente también valida que no se haya ejecutado previamente en la misma sesión.
  \item Al finalizar el componente deja la variable \textit{INICIO\_OK} con el valor ''grupo06'', si esta variable no esta en el ambiente, el inicio no termino correctamente.
  \item El componente debe tener permisos para poder modificar permisos de los archivos ejecutables, maestros y de configuración, ya que el mismo modifica dependiendo de la utilidad los permisos de cada archivo para poder ser ejecutados, leidos, modificados,etc.
\end{itemize}

%%% DETECTA %%%
\newpage
\subsection{DetectaY}
Esta funcion lanza un demonio encargado de detectar la llegada de archivos a
procesar, realizar una primer validacion sobre el nombre de archivo, y de ser
necesario invocar a InterpreteY para continuar el procesamiento del archivo.

\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] No posee
    \end{itemize}
  \item Intermedios
    \begin{itemize}
      \item[-] No posee
    \end{itemize}      
\end{enumerate} 

\paragraph{Variables de Entorno}
\begin{itemize}
  \item \texttt{\$CANLOOP}: Cantidad de verificaciones del directorio \texttt{\$ARRIDIR}.
  \item \texttt{\$TESPERA}: Tiempo entre verificaciones del directorio \texttt{\$ARRIDIR}.
  \item \texttt{\$ARRIDIR}: Directorio de llegada de archivos a procesar.
  \item \texttt{\$ACEPDIR}: Directorio donde enviar archivos que pasen las validaciones.
  \item \texttt{\$RECHDIR}: Directorio donde enviar archivos que no pasen las validaciones.
  \item \texttt{\$MAEDIR}: Directorio de maestros. Usado para validaciones.
\end{itemize}

\paragraph{Invocación}
\begin{enumerate}
   \item Invocación fuera del sistema
  \begin{verbatim}
    DetectaY.sh
  \end{verbatim}
   \item Invocación manual, se puede iniciar o parar el componente mediante las funciones StartY.sh y StopY.sh respectivamente
\end{enumerate}

\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item Si esta ejecutandose un demonio no se podra ejecutar otro.
\end{itemize}

%%% INTERPRETE %%%
\newpage
\subsection{Interprete}
Este comando procesa los archivos de prestamos.
Para ello toma los archivos de prestamos del directorio de ''aceptados'', los normaliza y guarda sus datos en el archivo de prestamos por pais.
Este proceso incluye la validación de los datos de los archivos y sus campos, asi como tambien el almacenamiento de los archivos que fueron procesados en forma exitosa o no.

\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] Archivos de prestamos
      \item[-] Tabla de separadores por pais y sistema
      \item[-] Tabla de campos por pais y sistema
    \end{itemize}
  \item Intermedios
    \begin{itemize}
      \item[-] Ninguno
    \end{itemize}      
  \item Output
    \begin{itemize}
      \item[-] Archivo de prestamos por pais
    \end{itemize}      
\end{enumerate}

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item[-] Ninguno
\end{itemize}


\paragraph{Invocación}
\begin{enumerate}

  \item Invocación Manual\\ \\
  \indent No hay restriccion en cuanto a la forma de invocar este comando, salvo por tener el ambiente incializado
    
  \item Invocación Autómatica\\ \\
  \indent Es invocado en forma automatica por el comando ''DetectaY'' si el usuario asi lo indica

\end{enumerate}


\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item[-] Si la variable de ambiente ''INICIO\_OK''  existe el entorno se considera inicializado.
  \item[-] Todos los directorios existen.
  \item[-] El script tiene permisos de lectura en los archivos de ''input''.
  \item[-] El script tiene permisos de escritura en los archivos de ''output''.
  \item[-] El script tiene los permisos necesarios para acceder a los directorios.
  \item[-] Todos los comandos/scripts se encuentran en el mismo lugar cuya dirección esta en la variable BINDIR.
\end{itemize}


%%% REPORTEy %%%
\newpage
\subsection{ReporteY}
Este comando se encargará de resolver, mostrar y, eventualmente, grabar consultas vinculadas a la
comparación entre dos fuentes: el archivo de préstamos por país (PRESTAMOS.<país>) y el archivo
maestro (PPI.mae).
\par
En primer lugar se debe asegurar que InicioY se haya ejecutado. En caso de que esto no haya ocurrido,
ReporteY informará esta situación y terminará su ejecución.

\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] Maestro de Países y Sistemas \texttt{\$MAEDIR/P-S.mae}.
      \item[-] Archivo Maestro Contable de Préstamos Personales Impagos \texttt{\$MAEDIR/PPI.mae}.
      \item[-] Archivos de Préstamos Personales por país \texttt{\$PROCDIR/PRESTAMOS.<pais>}.
    \end{itemize}
  \item Output
    \begin{itemize}
      \item[-] Archivos de Recalculo \texttt{\$REPODIR/RECALCULO.<pais>}.
      \item[-] Listados \texttt{\$REPODIR/ReporteY.xxx}.
    \end{itemize}      
\end{enumerate} 

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item[-] Par\'ametro 1 (Opcional): puede ser -h o -w
\end{itemize}


\paragraph{Invocación}
  La invocación de este comando es manual. Se invoca de la siguiente manera:
   \begin{verbatim}
    ReporteY.pl <Opción>
   \end{verbatim}
Ejemplos
\begin{itemize}
  \item[-] Ejemplo para visualizar la ayuda.
    \begin{verbatim}
      ReporteY.pl -h
    \end{verbatim}
  \item[-] Ejemplo para grabar un reporte de salida con lo mismo que se muestra por pantalla.
    \begin{verbatim}
      ReporteY.pl -w
    \end{verbatim}
\end{itemize}

\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item Se recomienda maximizar la ventana de la terminal para visualizar correctamente
  los resultados.
  \item Una vez que se realiza la invocación, se solicitará al usuario el ingreso del país
  sobre el cual se harán las consultas. No se podrá cambiar de país; en caso de desearlo,
  el usuario deberá terminar con las consultas deseadas sobre el país ingresado y contestar
  no cuando se le pregunte si desea hacer otra consulta. Luego, deberá volver a ejecutar el comando.
  \item Luego del ingreso del país, se mostrará un menú ofreciendo al usuario el ingreso de
  filtros. Si desea filtrar por código de sistema, por año, por período o rango de períodos,
  seleccionará la opción correspondiente y se le iran solicitando los datos. En caso de que
  no se quisieran aplicar filtros, el menú incluye la opción \texttt{Ninguno}.
  \item Solamente se puede solicitar un filtro temporal, es decir, año, período y rango de
  períodos son \texttt{excluyentes}, no pudiendo seleccionar dos a la vez.
  \item Seguido al ingreso de filtros, se mostrará un menú con las posibles consultas a
  realizar: comparación para el recálculo, diferencia (en valor absoluto) mayor al X\%,
  diferencia (en valor absoluto) mayor al \$X. En el caso de las dos últimas, se solicitará
  el ingreso del valor X.
  \item Se mostrarán los resultados y se preguntará si desea hacer otra consulta.
  \item En caso de la consulta \texttt{comparación para el recálculo}, se preguntará al
  usuario si desea guardar RECALCULO. En caso afirmativo, se almacenará en
  \texttt{\$REPODIR/RECALCULO.<pais>}.
  \item IMPORTANTE: En caso de que luego de filtrar los registros de PRESTAMOS.<pais> por
  fecha de grabación, aún haya más de uno, se tomará el último. Se tomó esta decisión porque
  se supone que el último registro es una corrección del anterior o anteriores.
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LISTADO DE FUNCIONES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
\section{Funciones}
%%% MOVERY %%%
\subsection{MoverY}

Esta función se va a encargar del movimiento de los archivos de un directorio
a otro contemplando la posibilidad de archivos duplicados.

Si el directorio origen y destino son iguales, no se efectuar\'a ning\'un movimiento.

Cuando el archivo a mover no exista en el directorio destino, se efectuará el movimiento
de archivo al directorio destino que se indica. Si se trata de un archivo duplicado, se
buscará en el subdirectorio que contiene todos los archivos duplicados, si existen archivos
con el mismo nombre seguido de un número de secuencia, ejemplo  Nombre\_Archivo.<extensi\'on>.<nro\_Sec>
De no existir el archivo en el subdirectorio, se lo agrega seguido del número de secuencia,
comenzando con 1, ejemplo Nombre\_Archivo.<extensión>.1. Si existen otros archivos duplicados
con el mismo nombre, se copiará el archivo a la carpeta de duplicados incrementando el número de secuencia.

Se indicar\'a en el archivo log correspondiente al comando que invoc\'o la funci\'on el
resultado de la operaci\'on.

\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] Archivo origen.
    \end{itemize}
  \item Output
    \begin{itemize}
      \item[-] Archivo en directorio destino.
    \end{itemize}      
\end{enumerate} 

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item[-] Parámetro 1: Ruta del archivo a mover.
  \item[-] Parámetro 2: Directorio destino.
  \item[-] Parámetro 3 (Opcional): Comando que invoca la función.
\end{itemize}

\paragraph{Invocación}
\begin{enumerate}

  \item Invocación Manual
  
  Cuando el comando se invoca manualmente de deberá hacer de la siguiente manera:
  \begin{verbatim}
    MoverY.sh <Ruta del Archivo> <Destino>
  \end{verbatim}

  Ejemplos:
  \begin{verbatim}
    MoverY.sh /Origen/archivo /Destino
  \end{verbatim}
    
  \item Invocación Autómatica
  
  La invocación la realiza otro comando. Para invocarla se debe indicar la ruta
  del archivo a mover, el directorio destino y el comando que invocó a la función.
  \begin{verbatim}
    MoverY.sh <Ruta del archivo> <Destino> <Comando>
  \end{verbatim}

  Ejemplos:
  \begin{verbatim}
    MoverY.sh $ARRIDIR/archivo $RECHDIR DetectaY
  \end{verbatim}

\end{enumerate}

\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item Si el origen o el directorio destino no existe, no se efectuará ningún movimiento.
  \item Cuando la invocación es manual, se generará un archivo log MoverY.LOGEXT donde se grabará el resultado de la operación.
\end{itemize}
 
%%% GLOGY %%%
\newpage
\subsection{GlogY}

Esta función se va a encargar de grabar en el archivo log correspondiente, los
mensajes que se pasen como parámetro. Cada registro se va grabar en el log
correspondiente respetando el Standard W5.

Por cada comando que invoca a la función GlogY se creará el archivo log
correspondiente en caso de no existir. Cada vez que se agregue un registro,
se verificará en primer lugar la existencia del archivo correspondiente a ese
comando, si no existe se lo crea y se añade el registro. Si el archivo ya
existe, se agrega el nuevo registro al mismo.

Para poder evitar el crecimiento indiscrimidado de los archivos logs, cuando
se agrega un nuevo registro, se verificará el tamaño del mismo. En caso de
exceder el máximo establecido, se reducirá el tamaño de dicho archivo,
indicandose en el log correspondiente que el log está excedido.

\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] Archivo log correspondiente al comando pasado como par\'ametro.
    \end{itemize}
  \item Intermedios
    \begin{itemize}
      \item[-] Archivo temporal para truncar archivo original
    \end{itemize}      
  \item Output
    \begin{itemize}
      \item[-] Archivo log truncado y recortado si corresponde.
    \end{itemize}      
\end{enumerate}

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item[-] Parámetro 1: \$0 del comando que lo invoca.
  \item[-] Parámetro 2 (Opcional): Tipo de mensaje, el cuál puede ser de carácter informativo, de alerta, de error o de error severo.
  \item[-] Parámetro 3: Mensaje
\end{itemize}

\paragraph{Invocación}
\begin{enumerate}

  \item Invocación Manual
  
  La invocación manual se deberá realizar de la siguiente manera:
  \begin{verbatim}
    GlogY.sh <Comando> <Tipo de Mensaje> <Mensaje>
  \end{verbatim}

  Ejemplos:
  \begin{verbatim}
    GlogY.sh "InicioY" "I" "Inicio de Ejecución"
  \end{verbatim}
    
  \item Invocación Autómatica
  
  En este caso como primer parámetro recibi el parámetro \$0 correspondiente al comando que lo invoca.
  Ejemplos:
  \begin{verbatim}
    GlogY.sh "$0" "I" "Inicio de Ejecución"
  \end{verbatim}

\end{enumerate}

\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item[-] Cuando la función solo recibe 2 parámetros, el comando que la invoca y el mensaje, se grabará en el archivo log correspondiente como mensaje de carácter Informátivo. 
\end{itemize}

%%% VLOGY %%%
\newpage
\subsection{VlogY}

Esta función se va a encargar de generar una visualización amigable del contenido
de un archivo log correspondiente al comando pasado como parámetro.

La visualización del archivo puede ser, ver las últimas n lineas del archivo
log, las primeras n lineas del archivo log o aquellas lineas que contengan un
string buscado, indicando adem\'as el n\'umero de linea en el que aparecen en
el archivo log.
 
\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] Archivo log correspondiente al comando pasado como par\'ametro.
    \end{itemize}
  \item Output
    \begin{itemize}
      \item[-] Se muestra por pantalla las lineas correspondientes.
    \end{itemize}      
\end{enumerate} 

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item[-] Parámetro 1: Comando
  \item[-] Parámetro 2: Filtro, puede ser -l,-f o -s. 
  \item[-] Parámetro 3: Cantidad de lineas o string a buscar (depende del filtro elegido)
\end{itemize}


\paragraph{Invocación}
La invocación manual se realiza de la siguiente manera:
\begin{verbatim}
VlogY.sh <Comando> <Filtro> <número o string>
\end{verbatim}
Ejemplos
\begin{itemize}
\item[-] Ejemplo para visualizar las primeras 10 lineas del archivo log del comando InicioY
  \begin{verbatim}
  VlogY.sh InicioY -f 10
  \end{verbatim}
\item[-] Ejemplo para visualizar las ultimas 10 lineas del archivo log del comando InicioY
  \begin{verbatim}
   VlogY.sh InicioY -l 10
  \end{verbatim}
\item[-] Ejemplo para visualizar lineas del archivo log del comando InicioY que contienen el string ``ejecución''
  \begin{verbatim}
   VlogY.sh InicioY -s "ejecución"
  \end{verbatim}
\end{itemize}


\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item No posee.
\end{itemize}

%%% STARTY %%%
\newpage
\subsection{StartY}
Esta funcion se encarga de invocar la funci\'on que recibe por parametro, dandole
los argumentos que reciba y verificando que esto sea posible. En caso de
especificarlo, escribe a log esta informaci\'on.

\paragraph{Invocaci\'on}
La invocaci\'on se realiza con:
\begin{verbatim}
 StartY [-l <Nombre Invocador>] <Comando> [<Argumentos>]
\end{verbatim}

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item \verb|[-l <Nombre Invocador>]|
  De uso interno, indica en que log debe registrarse el resultado de este llamado. 
  \item \verb|<Comando>|
  Comando a ser ejecutado.
  \item \verb|[<Argumentos>]|
  Argumentos que seran pasados directamente al comando a ejecutar.
\end{itemize}

%%% STOPY %%%
\newpage
\subsection{StopY}
Esta funcion se encarga de detener comandos que solo admiten una instancia en
ejecuci\'on, enviandole una señal SIGTERM a la instancia activa.

\paragraph{Archivos relacionados}
\begin{itemize}
  \item[-] Archivo de bloqueo por ID de proceso asociado al comando.
\end{itemize}

\paragraph{Invocación}
  La invocación se realiza de la siguiente manera:
  \begin{verbatim}
    StopY.sh [-K] [-l <Nombre Invocador>] [-t <Timeout>] <Comando>
  \end{verbatim}

  Ejemplo: Para solicitar pero no forzar que termine DetectaY.sh
  \begin{verbatim}
    StopY.sh "DetectaY.sh"
  \end{verbatim}

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item \verb|[-K]|
  En caso de no terminar normalmente el proceso antes del tiempo de espera, usar
  SIGKILL para terminarlo forzozamente en lugar de dar error.
  \item \verb|[-l <Nombre Invocador>]|
  De uso interno, indica en que log debe registrarse el resultado de este llamado.
  \item \verb|[-t <Timeout>]|
  Tiempo en segundos que se espera antes de terminar con error o usar SIGKILL (ver
  opcion \verb|-K|). Su valor por defecto es de 10 segundos.
  \item \verb|<Comando>|
  Comando a ser detenido.
\end{itemize}

\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item El comando solo tiene efecto si es ejecutado por un usuario con privilegios
  suficientes para enviar señales al proceso que se desea detener.
\end{itemize}

%%% WRITELOG %%%
\newpage
\subsection{WriteLog}
Tiene por objeto grabar en el archivo log correspondiente un registro respetando el Standard W5. Cada registro va a contener información sobre quién, qué, cuándo, dónde y por qué ocurre el evento.

\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] Archivo log correspondiente al comando pasado como par\'ametro.
    \end{itemize}
  \item Output
    \begin{itemize}
      \item[-] Archivo log actualizado.
    \end{itemize}      
\end{enumerate} 

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item[-] Parámetro 1: Comando 
  \item[-] Parámetro 2: Tipo de mensaje, que puede ser de carácter informátivo, de alerta, de error o error severo.
  \item[-] Parámetro 3: Mensaje
\end{itemize}

\paragraph{Invocación}
  Esta función es invocada por el comando GlogY de la siguiente manera:
  \begin{verbatim}
  WriteLog.sh <Comando> <Tipo de Mensaje> <mensaje>
  \end{verbatim}

  Ejemplos:
  \begin{verbatim}
  WriteLog.sh "InicioY" "I" "Inicio de Ejecución"
  \end{verbatim}
    
\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item No posee.
\end{itemize}

%%% BLOQUEAR PID %%%
\newpage
\subsection{Bloquear Pid}
\paragraph{Parámetros}
\begin{enumerate}
  \item Nombre de proceso del programa que solicita el bloqueo.
\end{enumerate}

\paragraph{Archivos relacionados}
\begin{itemize}
  \item[-] Archivo de bloqueos por ID de proceso asociado al comando.
\end{itemize}

\paragraph{Invocaci\'on}
  Todos los programas que no pueden tener multiples instancias activas invocan
  este comando. Devuelve 0 si no hay otras instancias activas del programa, da
  un breve mensaje de explicaci\'on y devuelve 1 de lo contrario. Su uso tipico
  (ejemplificado en shell) es:
  \begin{verbatim}
    if ! bloquear_pid.sh <Nombre> ; then
      exit $?
    fi
  \end{verbatim}

\paragraph{Aclaraciones del comando}
  Es un comando interno al sistema. Si el invocador no da su propio nombre el
  comando no tiene efecto.

%%% DESBLOQUEAR PID %%%
\newpage
\subsection{Desbloquear Pid}
\paragraph{Parámetros}
\begin{enumerate}
  \item Nombre de proceso del programa que solicita el desbloqueo.
\end{enumerate}

\paragraph{Archivos relacionados}
\begin{itemize}
  \item[-] Archivo de bloqueos por ID de proceso asociado al comando.
\end{itemize}

\paragraph{Invocaci\'on}
  Se recomienda que todos los programas que no admitan multiples instancias
  activas incluyan un llamado a este comando como parte de su limpieza. Su
  uso tipico (ejemplificado en shell) es:
  \begin{verbatim}
   trap "desbloquear_pid.sh <Nombre>" EXIT
  \end{verbatim}
  Donde al usar esta linea de codigo luego de tomar el bloqueo con \verb|bloquear_pid|,
  se asegura que al finalizar el programa se libera el bloqueo en condiciones
  normales.

\paragraph{Aclaraciones del comando}
  Es un comando interno al sistema. No existen situaciones donde sea necesario
  que el usuario ejecute manualmente este comando, y hacerlo puede llevar a que
  no se impida ejecutar multiples instancias de un comando que no acepta tal
  situaci\'on.

%%% CHECK_STATE %%%
\newpage
\subsection{Check State}

\paragraph{Archivos relacionados}
\begin{enumerate}
  \item Input
    \begin{itemize}
      \item[-] InstalY.conf
    \end{itemize} 
\end{enumerate} 

\paragraph{Parámetros y Opciones}
\begin{itemize}
  \item[-] No posee
\end{itemize}


\paragraph{Invocación}
\begin{enumerate}
    
  \item Invocación Autómatica\\ \\
  \indent Es invocado por el comando \textit{InstalY} y por el comando \textit{InicioY} para levantar el estado de las variables del sistema.

\end{enumerate}


\paragraph{Hipótesis y Aclaraciones del comando}
\begin{itemize}
  \item Antes de correr este comando debe estar definida la variables \textit{CONFFILE} con el path hacia el archivo de configuración InstalY.conf y la variable \textit{GRUPO} con el path de grupo06
  \item Es una función que levanta el estado de la configuración y chequea el estado
  \item Devuelve 0 si la instalación esta COMPLETA
  \item Devuelve 1 si la instalación esta INCOMPLETA y deja la variable \textit{LISTA} con la lista de cosas faltantes
  \item Devuelve 2 si no esta instalado el componente
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ARCHIVOS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage
\section{Archivos}
Se adjuntan los contenidos de los archivos en forma  separada al final de la documentación.
\subsection{Configuraci\'on}
\paragraph{Nombre del Archivo}
  \texttt{InstalY.conf}
\paragraph{Estructura}
  \texttt{<Variable>=<Valor>=<Usuario>=<Fecha>}
\paragraph{Descripción de los campos}
\begin{itemize}
  \item[-] Variable: Los valores posibles son GRUPO, CONFDIR, BINDIR, MAEDIR, ARRIDIR, ACEPDIR, RECHDIR, PROCDIR, REPODIR, LOGDIR, LOGEXT, LOGSIZE y DATASIZE.
  \item[-] Valor: Contenido de la variable al momento de la grabación.
  \item[-] Usuario: Es el login del usuario que graba el registro.
  \item[-] Fecha: Es la fecha y hora en el momento de la grabación del registro.
\end{itemize}

\subsection{Maestro de Contable de Pr\'estamos Personales Impagos}
\paragraph{Nombre del Archivo}
  \texttt{PPI.mae}
\paragraph{Estructura}
  Lineas compuestas por campos separados por \verb|";"| (punto y coma). Todos los
  campos son obligatorios. Los campos son, en orden:
\begin{enumerate}
  \item \texttt{PAIS\_ID}: Código de País.
  \item \texttt{SIS\_ID}: Código de Sistema.
  \item \texttt{CTB\_ANIO}: Año contable. 
  \item \texttt{CTB\_MES}: Mes contable.
  \item \texttt{CTB\_DIA}: Día contable
  \item \texttt{CTB\_ESTADO}: Estado contable.
  \item \texttt{PRES\_FE}: Fecha préstamo.
  \item \texttt{PRES\_ID}: Código préstamo.
  \item \texttt{PRES\_TI}: Tipo préstamo.
  \item \texttt{MT\_PRES}: Monto préstamo.
  \item \texttt{MT\_IMPAGO}: Monto impago.
  \item \texttt{MT\_INDE}: Monto interés devengado.
  \item \texttt{MT\_INNODE}: Monto interés no devengado.
  \item \texttt{MT\_DEB}: Monto debitado.
\end{enumerate}

\subsection{Maestro de Pa\'ises y Sistemas}
\paragraph{Nombre del Archivo}
  \texttt{p-s.mae}
\paragraph{Estructura}
  \texttt{<C\'odigo de Pa\'is>-<Nombre de Pa\'is>-<C\'odigo de Sistema>-<Nombre de Sistema>}
\paragraph{Descripción de los campos}
\begin{itemize}
  \item[-] PAIS\_ID: Código de País.
  \item[-] PAIS\_DESC: Nombre del País.
  \item[-] SIS\_ID: Código de Sistema.
  \item[-] SIS\_DES: Nombre del Sistema.
\end{itemize}

\subsection{Pr\'estamos Personales por Pa\'is}
\paragraph{Nombre del Archivo}
  \texttt{prestamos.<pa\'is>}
\paragraph{Estructura}
  Lineas compuestas por campos separados por \verb|";"| (punto y coma). Todos los
  campos son obligatorios. Los campos son, en orden:
\begin{enumerate}
  \item \texttt{SIS\_ID}: Código de Sistema.
  \item \texttt{CTB\_ANIO}: Año contable. 
  \item \texttt{CTB\_MES}: Mes contable.
  \item \texttt{CTB\_DIA}: Día contable
  \item \texttt{PRES\_ID}: Código préstamo.
  \item \texttt{MT\_PRES}: Monto préstamo.
  \item \texttt{MT\_IMPAGO}: Monto impago.
  \item \texttt{MT\_INDE}: Monto interés devengado.
  \item \texttt{MT\_INNODE}: Monto interés no devengado.
  \item \texttt{MT\_DEB}: Monto debitado.
  \item \texttt{MT\_REST}: Monto restante.
  \item \texttt{PRES\_CLI\_ID}: Código del cliente.
  \item \texttt{PRES\_CLI}: Nombre del cliente.
  \item \texttt{INS\_FE}: Fecha de grabación.
  \item \texttt{INS\_USER}: Usuario de grabación.
\end{enumerate}  

\subsection{Rec\'alculo}
\paragraph{Nombre del Archivo}
  \texttt{recalculo.<pa\'is>}
\paragraph{Estructura}
  Lineas compuestas por campos separados por \verb|";"| (punto y coma). Todos los
  campos son obligatorios. Los campos son, en orden:
\begin{enumerate}
  \item \texttt{SIS\_ID}: Código de Sistema.
  \item \texttt{CTB\_ANIO}: Año contable. 
  \item \texttt{CTB\_MES}: Mes contable.
  \item \texttt{PRES\_ID}: Código préstamo.
  \item \texttt{PRES\_CLI\_ID}: Código del cliente.
  \item \texttt{PRES\_CLI}: Nombre del cliente.
  \item \texttt{MT\_PRES}: Monto préstamo.
  \item \texttt{MT\_IMPAGO}: Monto impago.
  \item \texttt{MT\_INDE}: Monto interés devengado.
  \item \texttt{MT\_INNODE}: Monto interés no devengado.
  \item \texttt{MT\_DEB}: Monto debitado.
  \item \texttt{INS\_FE}: Fecha de grabación.
  \item \texttt{INS\_USER}: Usuario de grabación.
\end{enumerate}

\subsection{Reporte}
\paragraph{Nombre del Archivo}
  \texttt{ReporteY.xxx}
\paragraph{Estructura}
  \texttt{<Linea de Reporte>}  \\
  Siendo el campo Linea caracteres.

\subsection{Log}
\paragraph{Nombre del Archivo}
  \texttt{<Comando>.<LOGEXT>}
\paragraph{Estructura}
  \texttt{<Cu\'ando> <Qui\'en>-<D\'onde>-<Qu\'e>-<Por qu\'e>}
\paragraph{Descripción de los campos}
\begin{itemize}
  \item[-] Cu\'ando: Es la fecha y hora en el momento de la grabaci\'on del registro.
  \item[-] Qui\'en: Es el login del usuario que graba el registro.
  \item[-] D\'onde: Nombre del comando, función o rutina en donde se produce el evento que se registra en el log. 
  \item[-] Qué: Los valores posibles son I(Informátivo), W(Warning), E(Error), SE (Several error)
  \item[-] Por qué: Corresponde al mensaje, hasta 120 caracteres.
\end{itemize}

\subsection{Bloqueos por ID de proceso}
\paragraph{Nombre del Archivo}
  \texttt{\$CONFDIR/pid/<Nombre programa>}
\paragraph{Estructura}
  \texttt{<N\'umero id>}
\paragraph{Descripcion}
  El directorio contiene un archivo por cada programa que esta usando el 
  mecanismo de bloqueo. Cada archivo tiene como nombre el nombre del
  programa, y como contenido exactamente una id de proceso valida, que es la
  id de la instancia que solicito el bloqueo activo.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CODIGO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage
\vspace*{\stretch{1}}
\titlerule
  \begin{center}
  \Huge{
    \vspace{1em}
    C\'ODIGO FUENTE
    \vspace{1em}
  }
  \end{center}
\titlerule
\vspace*{\stretch{2}}

\addtocounter{part}{1}
\addcontentsline{toc}{part}{\thepart.\hspace*{0.3cm}C\'odigo fuente}

\includepdfset{pages=-,nup=1x2,landscape=true} \includepdf[scale=0.87, pagecommand={\thispagestyle{fancy}}]{codigo.pdf}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%APENDICE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage
\vspace*{\stretch{1}}
\titlerule
  \begin{center}
  \Huge{
    \vspace{1em}
    APÉNDICE
    \vspace{1em}
  }
  \end{center}
\titlerule
\vspace*{\stretch{2}}

\addtocounter{part}{1}
\addcontentsline{toc}{part}{\thepart.\hspace*{0.3cm}Apéndice}


\includepdfset{pages=-,nup=1x1,landscape=false}
\includepdf[scale=0.95, pagecommand={\thispagestyle{fancy}}]{Enunciado.pdf}
\end{document}
